package com.ixuea.courses.mycloudmusicapisp.util;

import cn.hutool.json.XML;
import com.ixuea.courses.mycloudmusicapisp.domain.Common;
import com.ixuea.courses.mycloudmusicapisp.domain.response.PageData;
import com.ixuea.courses.mycloudmusicapisp.domain.response.Response;
import com.ixuea.courses.mycloudmusicapisp.exception.NotFoundException;

import java.util.List;

import static com.ixuea.courses.mycloudmusicapisp.util.Constant.ERROR_UNKNOWN;
import static com.ixuea.courses.mycloudmusicapisp.util.Constant.ERROR_UNKNOWN_MESSAGE;

/**
 * 响应工具类
 *
 * 对返回的数据进行处理
 * 例如：包装；加密
 */
public class ResponseUtil {

    /**
     * 包装字符串数据
     * @param id
     * @return
     */
    public static Object wrap(String id) {
        Common data = new Common();
        data.setId(id);

        return wrap(data);
    }

    /**
     * 包装对象
     * <p>
     * 可能是失败响应
     *
     * @param xml
     * @return
     */
    public static Object wrapXml(String xml) {

        return new Response(XML.toJSONObject(xml));

    }


    /**
     * 包装对象
     * <p>
     * 可能是失败响应
     *
     * @param data
     * @return
     */
    public static Object wrap(Object data) {
        if (data == null) {
            //如果为空

            //抛出找不到资源异常
            throw new NotFoundException();
        }

        if (data instanceof List) {
            //没有分页包裹

            //就对列表包裹
            data = PageData.init(data);
        }

        data = new Response(data);
        return data;
    }


    /**
     * 错误响应
     * @param status
     * @param message
     * @return
     */
    public static Response failed(int status, String message) {
        return new Response(status, message);
    }

    /**
     * 有详细错误提示的响应
     * @param status
     * @param message
     * @param detail
     * @return
     */
    public static Response failed(int status, String message, List<String> detail) {
        return  new Response(status, message, detail);
    }

    /**
     * 未知错误
     * @return
     */
    public static Response failed() {
        return failed(ERROR_UNKNOWN, ERROR_UNKNOWN_MESSAGE);
    }

    /**
     * 成功响应
     *
     * 没有数据
     * @return
     */
    public static Object wrap() {
        return new Response();
    }
}
